使用 Python 生態系中的主要工具來解決單變量時間序列 (univariate time series) 的預測問題。金融量化研究員的目標是透過統計時間序列技術,從歷史金融數據中辨識趨勢 (trends)、季節性波動 (seasonal fluctuations) 和相依性 (dependencies),最終產生可執行的交易訊號。
首先,我們將使用 yfinance
獲取 S&P 500 (^GSPC) 指數的歷史數據作為分析對象。
時間序列資料在 pandas
中通常以 Series
的形式表示,其索引是時間標籤。我們載入資料後,會計算對數報酬率 (log returns
),因為報酬率序列通常比價格序列更接近定態 (stationary),這對於統計建模至關重要。
# 計算對數報酬率
Re = np.log(df).diff().dropna() # 等同於 np.log(df / df.shift(1))
為了將時間序列問題轉換為監督式學習問題,我們需要建構輸入特徵 (X) 和輸出目標 (y)。
延遲特徵 (Lag Features): 最經典的方法。我們使用過去時間點的值來預測未來的值。例如,用時間點 t-1
的值作為輸入,來預測時間點 t
的值。
# t-2, t-1, t
2012.66, 2016.71, 1990.26
滾動窗口統計 (Rolling Window Statistics): 計算滑動窗口內數據的統計量(如平均值),作為新的特徵。這有助於平滑數據並捕捉短期趨勢。
# 計算前兩個時間點的平均值
window = shifted.rolling(window=2)
means = window.mean()
擴展窗口統計 (Expanding Window Statistics): 窗口包含從序列開始到當前的所有數據,有助於追蹤觀測數據的整體變化。